package com.unity3d.networkapp10;


import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.TextView;


import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView txtView = findViewById(R.id.txtVId1);

        //使用Retrofit框架
        //1..创建一个Retrofit对象
        /*Retrofit retrofit=new Retrofit.Builder()
                        .baseUrl("http://121.4.44.56/")
                        .addConverterFactory(GsonConverterFactory.create())//表示以GSON框架解析数据
                        .build();*/

        //841e0bbc9f4d48b7a7fcd40dd4647c79
        //http://ali-weather.showapi.com/area-to-weather-date
        //2.获取到Api接口
        //返回一个接口实例
        Api api = RetrofitUtils.getRetrofit("http://ali-weather.showapi.com/").create(Api.class);

        Call<WeatherResponse> call=api.getWeather("appcode 841e0bbc9f4d48b7a7fcd40dd4647c79","长沙");
        call.enqueue(new Callback<WeatherResponse>() {
           @Override
           public void onResponse(Call<WeatherResponse> call, Response<WeatherResponse> response) {
                WeatherResponse weatherResponse=response.body();
                txtView.setText(weatherResponse.showapi_res_body.now.weather+" 温度 "+weatherResponse.showapi_res_body.now.temperature);
           }

           @Override
           public void onFailure(Call<WeatherResponse> call, Throwable t) {

           }
        });

        /*//3.通过Api获取到实体类Student
        retrofit2.Call<Student> call=api.getStudent();

        //4.enqueue一个队列，程序可以发起多个请求，将这些请求存在队列中一个一个的处理
        call.enqueue(new Callback<Student>() {
            @Override
            public void onResponse(Call<Student> call, Response<Student> response) {
                //请求成功：返回的结果是一个call对象，而不再是response，
                //默认将请求的结果抛回到主线程
                Student student = response.body();
                txtView.setText(student.name);
            }

            @Override
            public void onFailure(Call<Student> call, Throwable t) {
                //请求失败
            }
        });*/






       /* //发起请求
        //无需手动创建子线程，框架默认帮我们创建

        //1.创建一个okhttp对象
        OkHttpClient okHttpClient=new OkHttpClient();
        //2.创建一个Request对象，里面存放请求到的数据，调用Request类里的builder()方法，相当于调用了Request的静态方法
        //.url请求的地址
        //.get() 请求的方式 常用的请求方法1.get()   2.post() 这个由后端的接口决定
        //.build()
        Request request=new Request.Builder()
                .url("http://121.4.44.56/object")
                .get()
                .build();
        //3.将数据放到okHttpClient对象中
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {//enqueue一个队列，程序可以发起多个请求，将这些请求存在队列中一个一个的处理
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {
                //请求失败，打印解析失败原因
                Log.i("onFailure", "onFailure: "+e.getMessage());
            }

            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                //请求成功,通过response对象返回请求到的数据
                //子线程
                String result=response.body().string();
                Log.i("onResponse", "onResponse: "+result);

                //GSON搭配实体类插件`GsonFormatPlus`来解析数据
                Gson gson=new Gson();
                Student student=gson.fromJson(result,Student.class);
                //抛出到主线程
                runOnUiThread(new Runnable() {
                      @Override
                      public void run() {
                          txtView.setText(student.name);
                      }
                  }
                );

            }
        });

        //优势一：无需自己创建子线程
        //优势二：返回的数据不再是数据流，而是转换好的string字符串*/
    }
}